package main

import (
	"fmt"
	"github.com/ebitengine/purego"
	"github.com/gogf/gf/v2/container/garray"
)

// 定义一个函数类型，用于表示我们想要调用的 C 函数的签名。
// 这里假设 SayHello 是一个接受 char* 参数且返回 void 的函数。
type StartService func()
type RunService func()
type EndService func()

func main() {
	// 打开共享库（.so 文件）
	lib, err := purego.Dlopen("../service-go/libTest.so", purego.RTLD_LAZY|-purego.RTLD_LOCAL)
	if err != nil {
		fmt.Println("Failed to open library:", err)
		return
	}
	defer purego.Dlclose(lib)

	// 将符号转换为函数指针
	var startFunc StartService
	var runFunc RunService
	var endFunc EndService
	purego.RegisterLibFunc(&startFunc, lib, "StartService")
	purego.RegisterLibFunc(&runFunc, lib, "RunService")
	purego.RegisterLibFunc(&endFunc, lib, "EndService")
	startFunc()
	runFunc()
	endFunc()
	CompliedServiceLua("TestService", "../luaService/testLua.lua")
	libPaths := garray.NewStrArray()
	libPaths.Append("../lualib/")
	CompliedLibLua(libPaths)
	luaHelper := NewLuaHelper()
	luaHelper.Init()
	fmt.Println("Call completed.")
}
